﻿namespace EMan.Interface.Common
{
	/// <summary>
	/// Возможные типы сообщений.
	/// </summary>
	/// <remarks>Понадобилось, потому что долбаные мелкомягкие положили перечисление MessageBoxIcon в сборку WindowsForms.
	/// Добавлять ссылку на сборку WindowsForms в сборку с логикой, ради доступа к перечислению, считаю неправильным.</remarks>
	public enum MessageType
	{
		None		= 0,
		Error		= 16,
		Question	= 32,
		Warning		= 48,
		Information = 64,
	}

	/// <summary>
	/// Ответы на вопросы
	/// </summary>
	/// <remarks>Понадобилось, потому что долбаные мелкомягкие положили перечисление DialogResult в сборку WindowsForms.
	/// Добавлять ссылку на сборку WindowsForms в сборку с логикой, ради доступа к перечислению, считаю неправильным.</remarks>
	public enum Answer
	{
		None,
		Ok,
		Cancel,
		Abort,
		Retry,
		Ignore,
		Yes,
		No
	}

	/// <summary>
	/// Возможные ответы на заданный вопрос
	/// </summary>
	/// <remarks>Понадобилось, потому что долбаные мелкомягкие положили перечисление MessageBoxButtons в сборку WindowsForms.
	/// Добавлять ссылку на сборку WindowsForms в сборку с логикой, ради доступа к перечислению, считаю неправильным.</remarks>
	public enum PossibleAnswers
	{
		Ok,
		OkCancel,
		AbortRetryIgnore,
		YesNoCancel,
		YesNo,
		RetryCancel
	}

	public interface IView
	{
    object UiElement{ get; }

		/// <summary>
		/// Показывает сообщение пользователю.
		/// </summary>
		/// <param name="message">Текст показываемый пользователю.</param>
		/// <param name="messageType">Тип сообщения.</param>
		void ShowMessage(string message, MessageType messageType);

		/// <summary>
		/// Спрашивает пользователя, что делать.
		/// </summary>
		/// <param name="message">Текст показываемый пользователю.</param>
		/// <param name="messageType">Тип сообщения.</param>
		/// <param name="possibleAnswers">Задает возможные ответы на этот вопрос.</param>
		/// <returns>Возвращает выбраный пользователем ответ.</returns>
		Answer AskConfirmaiton(string message, MessageType messageType, PossibleAnswers possibleAnswers);
	}
}
